//#include <iostream>
#include <array>
#include <vector>
using namespace std;

////#define N 10
//
////静态的栈
//template <class T,size_t N = 10>
//class Stack
//{
//public:
//	void func()
//	{
//		N++;  //N是常量，不能修改
//	}
//
//private:
//	int _a[N];
//	int _top;
//};
//
//
//
////1. 浮点数、类对象以及字符串是不允许作为非类型模板参数的。
////2. 非类型的模板参数必须在编译期就能确认结果
//// C++20之前，只允许整型作非类型模板参数
////20之后，可以支持double等其他内置类型
//
////template <double X, string  str, int* ptr>
////class A
////{};
//
//void Array()
//{
//	//严格进行越界检查
//	array<int, 10>aa1;
//	cout << sizeof(aa1) << endl;
//	aa1[10];
//	aa1[14] = 1;
//
//	//静态
//	int aa2[10];
//	aa2[15] = 1;
//	aa2[8] = 1;
//
//	//arrat不如用vector，鸡肋设计
//	vector<int> v1(10, 1);
//
//	cout << sizeof(v1) << endl;
//}
//
//int main()
//{
//	//Stack<int> st1; //默认开10空间
//	//Stack<int, 100> st2; //开100空间
//
//	//按需实例化
//	//但是不调用的时候，不会报错
//	//st1.func(); 
//
//	Array();
//
//
//	return 0;
//}



//——————————————————————————————————————


////一切可以用{}初始化
//template<class T>
//void PrintVector(const vector <T>&v)
//{
//	//vector<T>::const_iterator it = v.begin(); //这个不行，有问题
//	// 类模板没实例化时，不去里面查细节东西,无法确认时类型还是静态变量
//	// 加typename明确告诉是类型
//	typename vector<T>::const_iterator it = v.begin(); //解决方法1
//	auto it = v.begin(); //解决方法2
//	while (it != v.end())
//	{
//		cout << *it << " ";
//		++it;
//	}
//	cout << endl;
//}
//
//int main()
//{
//	vector<int> v1 = { 1,2,3,4,5 };
//	vector<double> v2 = { 1,2,3,4,5 };
//	PrintVector(v1);
//	PrintVector(v2);
//
//	int i = 1;
//	int j = { 1 };
//	int k{ 1 };
//
//	return 0;
//}



